package cn.hello2018.sdk.operation;

import java.math.BigDecimal;

/**
 * 处理浮点数运算时精度丢失的问题
 *
 * @author jeymingwu
 * @date 2019/3/21 17:27
 */
public class BigDecimalUtil {

    private BigDecimalUtil() {

    }

    /**
     * 加法
     *
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal add(Double a, Double b) {
        BigDecimal ba = new BigDecimal(Double.toString(a));
        BigDecimal bb = new BigDecimal(Double.toString(b));
        return ba.add(bb);
    }

    /**
     * 减法
     *
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal sub(Double a, Double b) {
        BigDecimal ba = new BigDecimal(Double.toString(a));
        BigDecimal bb = new BigDecimal(Double.toString(b));
        return ba.subtract(bb);
    }

    /**
     * 乘法
     *
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal mul(Double a, Double b) {
        BigDecimal ba = new BigDecimal(Double.toString(a));
        BigDecimal bb = new BigDecimal(Double.toString(b));
        return ba.multiply(bb);
    }

    /**
     * 除法
     *
     * @param a
     * @param b
     * @return
     */
    public static BigDecimal div(Double a, Double b) {
        BigDecimal ba = new BigDecimal(Double.toString(a));
        BigDecimal bb = new BigDecimal(Double.toString(b));
        return ba.divide(bb, 2, BigDecimal.ROUND_HALF_UP); // 保留两位小数，四舍五入
    }
}
